package com.liushuyv.calculator.bll;

/*
 **@Author:刘淑钰
 *第二步修改的文件
 **Created on 2020/11/28
 */
public abstract class Operation<T extends Number> implements IOperation<T> {//前面是声明，后面是应用，跟着爸爸继承Number**1
    protected T a;
    protected T b;

    public void setValue(T a,T b) throws Exception {
    /*先进行数据合法性检查*/
        Class<?> type = a.getClass();
        Integer tia,tib;//t表示临时
        Float tfa,tfb;
        Double tda,tdb;
        if(type==Integer.class) {
        tia=a.intValue();
        tib=b.intValue();
            if(tia>1000||tib>1000){//因为数字后面是整形，所以也不能用比较，因为不知道具体是int float还是double，用到叫做反射的技术**2
                throw new Exception("数据范围超限");
            }
        }//我们要和它的类型比
       else if(type==Float.class) {
            tfa=a.floatValue();
            tfb=b.floatValue();
            if (tfa > 1000.0f || tfb > 1000.0f) {
                throw new Exception("数据范围超限");
            }
            }
        else if(type==Double.class) {
            tda=a.doubleValue();
            tdb=b.doubleValue();
            if (tda > 1000.0f || tdb > 1000.0f) {
                throw new Exception("数据范围超限");
            }
        }
        this.a=a;
        this.b=b;//如果前面都没有抛出异常，则数据合法，直接赋】=




        /*if(a>1000||b>1000){//因为数字后面是整形，所以也不能用比较，因为不知道具体是int float还是double，用到叫做反射的技术**2
            throw new Exception("数据范围超限");
        }else{
            this.a=a;
            this.b=b;//和c++不同的是在这里访问自身元素用.而不是箭头
        }*/
    }

    }

